﻿using System;
using System.Web.UI.WebControls;
using System.Data;

namespace LongWay.GUI.backoffice.usuario
{
    public partial class usuario_sch : System.Web.UI.Page
    {
        //Esto se usa para poder acceder a las columnas del GridView sin necesidad de tener que acceder a las mismas mediante los índices.
        #region Constantes
        private enum Columnas { Usuario, Email, Editar }
        #endregion Constantes

        //La "region" de eventos es la que si o si tiene que tener todos los "TRY CATCH" para el manejo de excepciones.
        #region Eventos
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                //Limpio el Label en donde mostré el error, si es que hubo alguno.
                this.lblError.Text = String.Empty;
            }
            catch (Exception ex)
            { this.lblError.Text = ex.Message; }
        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {
            try
            {
                //Busca los datos.
                this.FillGrid();
            }
            catch (Exception ex)
            { this.lblError.Text = ex.Message; }
        }

        protected void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                this.Response.Redirect("~/backoffice/usuario/usuario-abm.aspx");
            }
            catch (Exception ex)
            { this.lblError.Text = ex.Message; }
        }

        //Este es un evento que se ejecuta CADA vez por CADA fila de la grilla.
        //No importa si se trata de una fila de "cabecera", de "datos", o "footer", o lo que sea.
        protected void gvUsuario_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //Esto se ejecuta una vez por cada fila de datos.
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //Esto convierte el "e.Row.DataItem", en el tipo de datos que me devuelve el DataTable por cada fila del mismo.
                DataRowView drv = (DataRowView)e.Row.DataItem;

                //Muestro los datos en la grilla.
                e.Row.Cells[(Int32)Columnas.Usuario].Text = drv["Nombre"].ToString();
                e.Row.Cells[(Int32)Columnas.Email].Text = drv["Email"].ToString();

                //Obtengo el control del boton de cada item de la grilla.
                ImageButton btn = (ImageButton)e.Row.FindControl("btnEditar");
                //Me aseguro que esté escrito en la grilla, y no lo hayan borrado.
                if (btn != null)
                {
                    //Redirecciono a la página a la cual tiene que editar los datos.
                    btn.PostBackUrl = "~/backoffice/usuario/usuario-abm.aspx?usuarioID=" + drv["UsuarioId"].ToString();
                }
            }
        }
        #endregion Eventos

        //Funciones útiles que me sirven dentro de la página para no tener que codificar varias veces la misma cosa.
        //Siempre conviene tener todas las funciones comentadas, para ver qué es lo que hacen.
        #region Funciones

        /// <summary>
        /// Llena el GridView con los datos que vienen desde la base.
        /// </summary>
        private void FillGrid()
        {
            //Creo el objeto que voy a usar para hacer la consulta.
            Usuario oUsuario = new Usuario();
            oUsuario.Nombre = this.txtUsuario.Text.Trim();

            //Me obtengo los datos desde la base, filtrando por los atributos que le fui cargando al objeto anterior.
            DataTable dt = oUsuario.Query();

            //Le digo al GridView cual va ser su fuente de datos, y que enlace dichos datos.
            this.gvUsuario.DataSource = dt;
            this.gvUsuario.DataBind();
        }
        #endregion Funciones
    }
}